package com.fxu.framework.biz.rest;

import com.fxu.framework.core.base.Result;
import com.fxu.framework.core.sql.SEntity;
import com.fxu.framework.core.sql.SQuery;

import java.util.List;
import java.util.Map;

/**
 * <p>小飞鼠</p>
 * 业务逻辑接口
 *
 * @author fangxu
 * @version 1.0.0
 */
public interface ApiBizRest<SE extends SEntity<?>> {
    /**
     * <p>填充Entity对象</p>
     * @param beans Entity对象集合
     * @param showFlags 显示参数
     */
    default void fillBeans(List<SE> beans, List<String> showFlags) {
    }

    /**
     * <p>填充Entity对象</p>
     * @param beans Entity对象集合
     * @param showFlags 显示参数
     * @param map 前端传入的查询条件
     */
    default void fillBeans(List<SE> beans, List<String> showFlags, Map<String, Object> map) {
    }

    /**
     * <p>填充查询条件</p>
     * @param clazz 实体类
     * @param map 查询条件
     * @return 返回执行结果
     */
    default Result<SQuery<SE>> filterMap(Class<SE> clazz, Map<String, Object> map) {
        return Result.ok(new SQuery<>(clazz));
    }
    
    /**
     * <p>保存前处理</p>
     * @param dbBean 旧数据[从数据库读出],如果添加为null
     * @param bean Entity对象
     * @return 返回执行结果
     */
    default Result<SE> saveBefore(SE dbBean, SE bean) {
        return Result.ok(bean);
    }
    
    /**
     * <p>保存后处理</p>
     * @param dbBean 旧数据[从数据库读出],如果添加为null
     * @param after 保存后Entity对象
     * @return 返回执行结果
     */
	default Result<SE> saveAfter(SE dbBean, SE after) {
	    return Result.ok(after);
    }
    
    /**
     * <p>删除前处理</p>
     * @param dbBean 旧数据[从数据库读出]
     * @return 返回执行结果
     */
	default Result<SE> deleteBefore(SE dbBean) {
	    return Result.ok(dbBean);
    }
}